/*
 * CustomerAction.java
 * 
 * Created on 02/10/2007, 12:43:14 PM
 * 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view.actions;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.bean.ActaElectoral;
import model.bean.MesaVotacion;
import model.bean.PadronElectoral;
import model.bean.Puesto;
import model.bean.Socio;

import model.factory.RecreacionalFactory;
import model.mail.IMailSenderUtil;
import model.service.MesaVotacionService;
import model.service.PadronElectoralService;
import model.service.PuestoService;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import view.common.struts.CustomActionForm;

import view.common.struts.CustomDispatchAction;

/**
 * @Archivo LoginAction.java
 * @Fecha                @Autor   @Cambios
 * 21/01/2011 02:35:29 PM       moshiro
 */
public class PadronElectoralAction extends CustomDispatchAction {

    private final static String PRINCIPAL = "principal";

    @Override
    public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) throws Exception {
        try {
            CustomActionForm frm = (CustomActionForm) form;
            List list = getPadronElectoralService().listarPadronElectoral(new PadronElectoral());
            frm.setBeanList(list);
            frm.setMapList(new HashMap());
            
            List listaMesaVotacion = getMesaVotacionService().listarMesaVotacion(null);
            frm.getMapList().put("listaMesaVotacion", listaMesaVotacion);

            Puesto puesto = new Puesto();
            puesto.setTipo(2);
            
            List listaPuesto = getPuestoService().listarPuesto(puesto);
            frm.getMapList().put("listaPuesto", listaPuesto);

            frm.getMapList().put("existeData", (list.size()>0));

        } catch (Exception ex) {
            logger.error(ex);
        }
        return mapping.findForward(PRINCIPAL);
    }

    public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) throws Exception {
        return mapping.findForward(PRINCIPAL);
    }

    public ActionForward cargar(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) throws Exception {
        try {
            CustomActionForm frm = (CustomActionForm) form;

            getPadronElectoralService().generarPadronElectoral(1L);
            
            List list = getPadronElectoralService().listarPadronElectoral(new PadronElectoral());
            frm.setBeanList(list);
            frm.setMapList(new HashMap());

            List listaMesaVotacion = getMesaVotacionService().listarMesaVotacion(null);
            frm.getMapList().put("listaMesaVotacion", listaMesaVotacion);

            Puesto puesto = new Puesto();
            puesto.setTipo(2);

            List listaPuesto = getPuestoService().listarPuesto(puesto);
            frm.getMapList().put("listaPuesto", listaPuesto);

            frm.getMapList().put("existeData", (list.size()>0));

        } catch (Exception ex) {
            logger.error(ex);
        }
        return mapping.findForward(PRINCIPAL);
    }

    public ActionForward consultar(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) throws Exception {
        try {
            CustomActionForm frm = (CustomActionForm) form;
            
            Socio socio = new Socio();
            socio.setNombre("%" + frm.getQueryString3() + "%");

            Puesto puesto = new Puesto();
            if(!frm.getQueryString2().equals("0")){
                puesto.setCodigo(Long.parseLong(frm.getQueryString2()));
            }
            MesaVotacion mesaVotacion = new MesaVotacion();
            if(!frm.getQueryString().equals("0")){
                mesaVotacion.setCodigo(Long.parseLong(frm.getQueryString()));
            }
            ActaElectoral actaElectoral = new ActaElectoral();
            actaElectoral.setMesaVotacion(mesaVotacion);

            PadronElectoral padron = new PadronElectoral();
            padron.setEstado(1);
            padron.setPuesto(puesto);
            padron.setSocio(socio);
            padron.setActaElectoral(actaElectoral);
            
            List list = getPadronElectoralService().listarPadronElectoral(padron);
            frm.setBeanList(list);

            List listaMesaVotacion = getMesaVotacionService().listarMesaVotacion(null);
            frm.getMapList().put("listaMesaVotacion", listaMesaVotacion);

            Puesto puestoParam = new Puesto();
            puestoParam.setTipo(2);

            List listaPuesto = getPuestoService().listarPuesto(puestoParam);
            frm.getMapList().put("listaPuesto", listaPuesto);

            frm.getMapList().put("existeData", (list.size()>0));
            
        } catch (Exception ex) {
            logger.error(ex);
        }
        return mapping.findForward(PRINCIPAL);
    }

    public ActionForward enviarMail(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) throws Exception {
        try {
            List<PadronElectoral> list = getPadronElectoralService().listarPadronElectoral(new PadronElectoral());
            Map<String, Object> model = new HashMap<String, Object>();
            for (PadronElectoral padron : list) {
                try {
                    model.put("padron", padron);
                    getMail().sendMail(getServlet().getServletContext(), model, "padron_publicado.vm", "TUNQUI: Convocatoria de Elecciones", padron.getSocio().getCorreo());
                    logger.info("Se envio padron via correo a " + padron.getSocio().getCorreo());
                } catch (Exception ex) {
                    logger.warn("Error en envio de mail a contactos " + padron.getSocio().getCorreo(), ex);
                }
                break;
            }
        } catch (Exception ex) {
            logger.error(ex);
        }
        return mapping.findForward(PRINCIPAL);
    }

    private PadronElectoralService getPadronElectoralService() {
        return RecreacionalFactory.getInstance().getPadronElectoralService();
    }

    private MesaVotacionService getMesaVotacionService() {
        return RecreacionalFactory.getInstance().getMesaVotacionService();
    }

    private PuestoService getPuestoService() {
        return RecreacionalFactory.getInstance().getPuestoService();
    }

    private IMailSenderUtil getMail() {
        return RecreacionalFactory.getInstance().getMail();
    }
}
